package be.ipl.finito.usecasesimpl;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import be.ipl.finito.dao.GrilleDao;
import be.ipl.finito.domaine.Grille;
import be.ipl.finito.domaine.Jeton;
import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.domaine.Partie;
import be.ipl.finito.usecases.GestionGrille;
import be.ipl.finito.util.CaseGrille;
import be.ipl.finito.util.Util;

@Stateless
public class GestionGrilleImpl implements GestionGrille {

	@EJB
	GrilleDao gdao;

	@Override
	public Grille creerGrille(Joueur j, Partie p) {
		//System.out.println("partieidddddddddddddddddddddddddd: "+p.getId());
		Grille g = new Grille(j, p);

//		if (!p.inscrireJoueur(g)) {
//			return null;
//		}
		return this.gdao.enregistrer(g);
	}

	@Override
	public Grille mettreJeton(Jeton j, Grille g, int index, int valeurDe) {
		Util.checkObject(j);
		Util.checkObject(g);
		Util.checkPositive(index);
		Util.checkObject(valeurDe);
		//g = this.gdao.rechercher(g.getId());
		g.mettreJeton(j, index, valeurDe);
		return this.gdao.mettreAJour(g);

	}

	@Override
	// TODO pas certain
	public Grille deplacerJeton(Grille g) {
		//g = this.gdao.rechercher(g.getId());
		g = this.chargerTout(g);
		return this.gdao.mettreAJour(g);
	}

	@Override
	public List<CaseGrille> recupererJetonsJoues(Grille g) {
		//g = this.gdao.rechercher(g.getId());
		//g = this.chargerTout(g);
		return g.getCaseOccupees();
	}

	private Grille chargerTout(Grille g) {
		g = this.gdao.chargerCasesGrilles(g);
		return g;
	}

	@Override
	public Grille rechercherGrille(Partie p, Joueur j) {
		Util.checkObject(p);
		Util.checkObject(j);
		
		return gdao.rechercherGrille(p, j);
	}

	

	@Override
	public List<Grille> listeGrillesPartie(Partie partie) {
		
		return gdao.listeGrillesPartie(partie);
	}

	@Override
	public Grille modifierGrille(Grille grilleJoueur) {
		
		return gdao.mettreAJour(grilleJoueur);
	}

	@Override
	public boolean remplirUneCaseDeLaGrille(Grille grilleCourante, Jeton jeton, int index,
			int positionChoisieParLeServeur, int valeurCase) {
		
		return grilleCourante.mettreJetonV2(jeton, index, positionChoisieParLeServeur, valeurCase);
	}
}
